package com.sicheng.lc.lc笔试.美团篇;

import java.util.Scanner;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/9/4 0:22
 */
public class 数组删数mex {
    /**
     * 若S表示一个非负整数集合，mex(S)的值为不属于集合S的最小非负整数。
     * 例如，mex({0,1,4})=2，mex({1，2})=0。
     * 有n个互不相同的非负整数a1，a2，…an构成了一个非负整数集合A。
     * 小美想知道若将a；(1≤i≤n)从集合A中删除，剩下的n-1个数构成的新集合A'的mex值为多少？
     * 请输出i从1到n所有取值下新集合的mex值。
     * 输入描述
     * 第一行输入一个整数n，表示集合A的大小。
     * 第二行输入n个整数a1，a2,…an。
     * n<5e4,ai≤1e9，保证ai互不相同。数字间两两有空格隔开。
     * 输出描述
     * 输出n个整数，相邻两个数之间用空格隔开。其中第i个数表示从集合A中删除aj，剩下n-1个数构成的新集合的mex值。
     */

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n], b = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
            b[i] = a[i];
        }
        for (int i = 0; i < n; i++) {
            while (a[i] != i && a[i] < n) {
                int j = a[i];
                a[i] = a[i] ^ a[j];
                a[j] = a[i] ^ a[j];
                a[i] = a[i] ^ a[j];
            }
        }
        int x = n;
        for (int i = 0; i < n; i++) {
            if (a[i] != i) {
                x = i;
                break;
            }
        }

        for (int i = 0; i < n; i++) {
            System.out.println(Math.min(x, b[i]) + " ");
        }

    }

}
